<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<%@page import="net.groupme.api.API_CONSTANTS"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<!-- meta tags, link to css:  -->
	<%@ include file="../../jsp-includes/mymetaheader.jsp" %>
	
	<!--  Ajax-Includes -->
    <script type='text/javascript' src='<%= request.getContextPath()%>/dwr/interface/DWRUserManager.js'></script>
    <script type='text/javascript' src='<%= request.getContextPath()%>/dwr/interface/DWRSearchManager.js'></script>
    <script type='text/javascript' src='<%= request.getContextPath()%>/dwr/engine.js'></script>
    <script type='text/javascript' src='<%= request.getContextPath()%>/dwr/util.js'></script>
    <script src="<%= request.getContextPath()%>/scriptaculous/prototype.js" type="text/javascript"></script>
	<script src="<%= request.getContextPath()%>/scriptaculous/scriptaculous.js" type="text/javascript"></script>

	<title>
		GroupMe! - Semantic RESTful API
	</title>
	<script type="text/javascript" language="javascript"><!--
	//<![CDATA[//>


function init() {
  DWRUtil.useLoadingMessage();
}

	//<!]]>
	--></script>
</head>
<body onload="init();">
	<!-- title image, logo:  -->
	<div id="groupme_header">
		<%@ include file="../../jsp-includes/groupme_header.jsp" %>
	</div>
	
	<!-- Menu: -->
	<div id="menu">
		<%@ include file="../../jsp-includes/groupme_menu.jsp" %>
	</div>
	<!-- content and sidebar -->
	<!-- Content: -->
	<div id="mycontent">
		
			<div class="ro_bw">
				<div class="lo_bw">
					<div class="ru_bw">
						<div class="lu_bw">
							<div id="user_groups">
								<div class="content_header" id="grouplist_header" style="padding-top: 2px">
									<small style="color: #006699;">
									<span id="register_header">
										RESTful API
									</span> 
									</small>
								</div>
								
								<div class="generalContent" style="">
								<div id="personal-menu" style="padding-bottom: 1em;"><strong>APIs:
											<a href="../" title="Overview">Overview</a> | 
											 <a href="../rest/" title="RESTful API">RESTful API</a> |
											 <a href="../export/" title="Export API">Export API</a> |
											 <a href="../search/" title="Search API">Search API</a></strong>
								</div>
								<h2>RESTful API</h2>
								<p>GroupMe!'s RESTful API is actually a Semantic Web based RESTful API, because data that is exchanged between 
								your client application and GroupMe! is semantically well-defined RDF. Currently, we use the following schemas
								to wrap GroupMe! data.</p>
								<br/>
								<strong>Schemas:</strong>
								<ul>
									<li><a href="http://xmlns.com/foaf/spec/">FOAF</a> - the Friend of the Friend vocabulary is used to describe the GroupMe! users as 
									well as documents</li>
									
									<li><a href="http://dublincore.org/documents/dcmi-terms/">DCMI</a> - from the Dublin Core Metadata Terms we use terms like <code>dc:description</code>, 
									<code>dc:title</code>, etc. to describe the GroupMe! resources </li>
									
									<li><a href="http://www.holygoat.co.uk/projects/tags/">Tag Ontology</a> - the Tag Ontology models tag assignments done in GroupMe!</li>
									
									<li><a href="http://groupme.org/rdf/groupme.owl">GroupMe! Ontology</a> - the GroupMe! Ontology defines new concepts such as GroupMe! groups</li>
								</ul>
								<br/>
								<p>The RDF-based RESTful API implements the following HTTP methods.</p>
								<br/>
								<ol>
									<li><strong>GET:</strong> Enables client application to receive RDF representations of users, tags, resources, and GroupMe! groups.</li>
									
									<li><strong>POST:</strong> Client applications that want to create new GroupMe! content can <i>post</i> the RDF representation of the content to GroupMe! </li>
								</ol>
								<br/>
								
								<h3>OAuth Authorization</h3>
								<p>Client applications can create new GroupMe! content (e.g., creating a new group) or they can access also private data of the user. Therefor, client applications have to be 
								authorized by the user. Here, GroupMe! supports the <a href="http://oauth.net/core/1.0">OAuth Protocol</a>. GroupMe!'s OAuth authorization endpoints are:</p>
								<br/>
								<ul>
									<li><a href="<%= VIEW_VOCABULARY.GROUPME_BASE_URL + "oauth/request_token.do" %>"><%= VIEW_VOCABULARY.GROUPME_BASE_URL + "oauth/request_token.do" %></a> - the <strong>Request Token URL</strong> is 
									used to obtain an unauthorized Request Token, which is the first step of the authorization process (cf. OAuth Core 1.0: <a href="http://oauth.net/core/1.0/#auth_step1">6.1 Obtaining an Unauthorized Request Token</a>).</li>

									 <li><a href="<%= VIEW_VOCABULARY.GROUPME_BASE_URL + "oauth/authorize.do" %>"><%= VIEW_VOCABULARY.GROUPME_BASE_URL + "oauth/authorize.do" %></a> - the <strong>User Authorization URL</strong> is used to 
									 obtain User authorization for Consumer access (second step of the authorization process) (cf. OAuth Core 1.0: <a href="http://oauth.net/core/1.0/#auth_step2">6.2 Obtaining User Authorization</a>).</li>
									 
									 <li><a href="<%= VIEW_VOCABULARY.GROUPME_BASE_URL + "oauth/access_token.do" %>"><%= VIEW_VOCABULARY.GROUPME_BASE_URL + "oauth/access_token.do" %></a> - the <strong>Access Token URL</strong> is used to 
									 exchange the User-authorized Request Token for an Access Token (third step of the authorization process) (cf. OAuth Core 1.0: <a href="http://oauth.net/core/1.0/#auth_step3">6.3 Obtaining an Access Token</a>).</li>
								</ul>
								<br/>
								<p>Whenever new content should be created on behalf of the user or private data of the user should be accessed then the client has to send his OAuth credentials to GroupMe!. 
								For more details on OAuth, we can recommend you the <i>Getting Started Tutorial</i> at <a href="http://oauth.net/">http://oauth.net</a>
								and have a look at the <a href="http://oauth.net/core/diagram.png">overview diagram</a> illustrating the protocol flow. Further, we encourage you to make use of the 
								 programming libraries available at <a href="http://code.google.com/p/oauth/">http://code.google.com/p/oauth/</a> or simply drop us a <a href="mailto:groupme@kbs.uni-hannover.de">mail</a>.<br />
								Java Web application developers anyhow do not have to worry about OAuth protocol handling and GroupMe!-specific RDF-(de)serialization
								as they can make use of the <i>Client API module</i>. </p>
								<br/>


								<h3>1. GET</h3>
								<p>GroupMe! RDF data can be accessed via HTTP.GET. In particular, each the RDF representation of a GroupMe!
									entity (i.e. user, tag, resource, or GroupMe! group) can be accessed with simple HTTP.GET requests. Here, GroupMe! 
									adheres to the principles of <a href="http://www.linkeddata.org">Linked Data</a>.</p>
								<br/>
								<p>There are two ways how a client application can tell GroupMe! that it wants to receive RDF representations:</p>
								<br/>
								<ol>
									<li>Via preferences about the preferred accepted media type. In particular, this means that in the 
									<a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">Accept HTTP Header field</a> the client indicates that <code>application/rdf+xml</code> is the preferred media type
									he wants to receive. <br/>
									Example:
									<br/>
									<br/>
									<pre>Accept: text/plain; q=0.5, text/html; q=0.8, application/rdf+xml</pre>
									<br/>
									The example above is an extract of an HTTP header, where the Accept field can be interpreted as follows: <code>application/rdf+xml</code> is the most preferred media type, 
									<code>text/html</code> is the second best preferred media type (as it just has a quality factor of 0.8), and <code>text/plain</code> is the least preferred media type
									(as it just has a quality factor of 0.5).
									</li>
									
									<li>Via an extra parameter in the HTTP query string. If a client application appends <code>?output=rdf</code> to the URL 
									of a  users, tag, resource, or GroupMe! group, then its RDF representation is returned (independently of what is specified in the HTTP Accept Header field. </li>
								</ol>
								<br/>
								<p><strong>Examples:</strong> Access the RDF representation of a</p>
								<br />
								<ul>
									<li><strong>user:</strong> <a href="<%= VIEW_VOCABULARY.RESTful_USER_URI_PATTERN + "fabian?" + API_CONSTANTS.PARAMETER_OUTPUT + "=" + API_CONSTANTS.OUTPUT_RDF %>"><%= VIEW_VOCABULARY.RESTful_USER_URI_PATTERN + "fabian?" + API_CONSTANTS.PARAMETER_OUTPUT + "=" + API_CONSTANTS.OUTPUT_RDF %></a> </li>
									<li><strong>tag:</strong> <a href="<%= VIEW_VOCABULARY.RESTful_TAG_URI_PATTERN + "semantic_web?" + API_CONSTANTS.PARAMETER_OUTPUT + "=" + API_CONSTANTS.OUTPUT_RDF %>"><%= VIEW_VOCABULARY.RESTful_TAG_URI_PATTERN + "semantic_web?" + API_CONSTANTS.PARAMETER_OUTPUT + "=" + API_CONSTANTS.OUTPUT_RDF %></a> </li>
									<li><strong>resource:</strong> <a href="<%= VIEW_VOCABULARY.RESTful_RESOURCE_URI_PATTERN + "2653?" + API_CONSTANTS.PARAMETER_OUTPUT + "=" + API_CONSTANTS.OUTPUT_RDF %>"><%= VIEW_VOCABULARY.RESTful_RESOURCE_URI_PATTERN + "2653?" + API_CONSTANTS.PARAMETER_OUTPUT + "=" + API_CONSTANTS.OUTPUT_RDF %></a> </li>
									<li><strong>group:</strong> <a href="<%= VIEW_VOCABULARY.RESTful_GROUP_URI_PATTERN + "2083?" + API_CONSTANTS.PARAMETER_OUTPUT + "=" + API_CONSTANTS.OUTPUT_RDF %>"><%= VIEW_VOCABULARY.RESTful_GROUP_URI_PATTERN + "2083?" + API_CONSTANTS.PARAMETER_OUTPUT + "=" + API_CONSTANTS.OUTPUT_RDF %></a> </li>
								</ul>
								
								<br />
								<br/>
								<h4>1.1 List GroupMe! groups of current user</h4>
								<div style="font-size: small">
									<p>
									If a user accesses <a href="<%= VIEW_VOCABULARY.RESTful_MyGroupMe %>"><%= VIEW_VOCABULARY.RESTful_MyGroupMe_GROUPS %></a> then he sees his
									GroupMe! groups. Client applications can access the RDF representation of these groups.<br/>
									<strong>Method:</strong> <a href="<%= VIEW_VOCABULARY.RESTful_MyGroupMe_GROUPS %>?output=rdf"><%= VIEW_VOCABULARY.RESTful_MyGroupMe_GROUPS %>?output=rdf</a><br/>
									<strong>Returns:</strong> the RDF representation of the GroupMe! groups created by the user<br/>
									<strong>Example result:</strong> <a href="<%= VIEW_VOCABULARY.GROUPME_BASE_URL %>user/fabian?output=rdf"><%= VIEW_VOCABULARY.RESTful_MyGroupMe_GROUPS %>?output=rdf</a>
									</p>
									<br/>
									
								</div>
								<br/>
								<br/>
								<h3>2. POST</h3>
								<p>For all following POST operations provided by the GroupMe! API, the client applications have to submit the required OAuth parameters such as <code>oauth_token</code>.</p>
								<br/>
								<h4>2.1 Create a new GroupMe! group</h4>
								<div style="font-size: small">
									<p>
									<strong>Method:</strong> <a href="<%= VIEW_VOCABULARY.RESTful_CREATE_NEW_GROUP %>"><%= VIEW_VOCABULARY.RESTful_CREATE_NEW_GROUP %></a><br/>
									<strong>Parameter:</strong> <code>rdf</code><br/>
									<strong>Value of <i>rdf</i>:</strong> the RDF representation of the group that should be created (ID/URI of the group can be selected arbitrary as they are replaced anyhow when the GroupMe! group is created properly).<br/>
									<strong>Returns:</strong> the RDF representation of the GroupMe! group (with a valid URI) that was actually created<br/>
									<strong>Example:</strong><br />
									The HTTP request that is posted to <a href="<%= VIEW_VOCABULARY.RESTful_CREATE_NEW_GROUP %>"><%= VIEW_VOCABULARY.RESTful_CREATE_NEW_GROUP %></a> might look as
									follows:</p><br/>
									<pre>
POST  /GroupMe/home/create-new-group  HTTP/1.1
Host: http://groupme.org
Accept: application/rdf+xml
	
oauth_token: c6b8ece703858cc0da977c72c3c4fb74 
oauth_consumer_key: groupmewebclient 
oauth_signature_method: HMAC-SHA1
oauth_timestamp: 1236728948 
oauth_nonce: 1236728948600883000
oauth_version: 1.0
oauth_signature: 9VWFYuQIrf7SHpLCktd9b5qfegQ%3D							    
rdf: 
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rdf:RDF
	xmlns:gm="http://groupme.org/rdf/groupme.owl#"
	xmlns:dc="dc"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:tags="http://www.holygoat.co.uk/owl/redwood/0.1/tags/#"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/group/test-group"&gt;
	&lt;rdf:type rdf:resource="http://groupme.org/rdf/groupme.owl#Group"/&gt;
	&lt;title xmlns="http://purl.org/dc/elements/1.1/"&gt;Test-1236729123776&lt;/title&gt;
	&lt;description xmlns="http://purl.org/dc/elements/1.1/"&gt;test description&lt;/description&gt;
	&lt;foaf:maker rdf:resource="http://groupme.org/GroupMe/user/test"/&gt;
	&lt;tags:taggedWithTag rdf:resource="http://groupme.org/GroupMe/tag/test-tag"/&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/tag/test-tag"&gt;
	&lt;rdf:type rdf:resource="http://www.holygoat.co.uk/owl/redwood/0.1/tags/#Tag"/&gt;
	&lt;tags:name&gt;test-tag&lt;/tags:name&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/resource/1"&gt;
	&lt;rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Document"/&gt;
	&lt;title xmlns="http://purl.org/dc/elements/1.1/"&gt;test resource&lt;/title&gt;
	&lt;description xmlns="http://purl.org/dc/elements/1.1/"&gt;test resource description&lt;/description&gt;
	&lt;seeAlso xmlns="http://www.w3.org/2000/01/rdf-schema#" rdf:resource="http://example.org"/&gt;
	&lt;tags:taggedWithTag rdf:resource="http://groupme.org/GroupMe/tag/res-tag"/&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/tag/res-tag"&gt;
	&lt;rdf:type rdf:resource="http://www.holygoat.co.uk/owl/redwood/0.1/tags/#Tag"/&gt;
	&lt;tags:name&gt;res-tag&lt;/tags:name&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/group/test-group"&gt;
	&lt;gm:contains rdf:resource="http://groupme.org/GroupMe/resource/1"/&gt;
&lt;/rdf:Description&gt;

&lt;/rdf:RDF&gt;									
									</pre>
									<br />
									<p>In the example, the group (<code>http://groupme.org/GroupMe/group/test-group</code>) that is posted to the GroupMe! system, contains one 
									resource (<code>http://groupme.org/GroupMe/resource/1</code>), 
									which is annotated with with a tag <code>res-tag</code>. The group itself has a tag as well: <code>test-tag</code>.
									If the client application (<code>groupmewebclient</code>) is authorized, i.e. if the <code>oauth_token</code> is valid, then 
									the group will be created within the GroupMe! system and the following RDF representation of the group
									will be returned: 
									</p><br/>
									<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rdf:RDF
	xmlns:gm="http://groupme.org/rdf/groupme.owl#"
	xmlns:dc="dc"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:tags="http://www.holygoat.co.uk/owl/redwood/0.1/tags/#"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/group/2825"&gt;
	&lt;rdf:type rdf:resource="http://groupme.org/rdf/groupme.owl#Group"/&gt;
	&lt;title xmlns="http://purl.org/dc/elements/1.1/"&gt;Test-1236729123776&lt;/title&gt;
	&lt;description xmlns="http://purl.org/dc/elements/1.1/"&gt;test description&lt;/description&gt;
	&lt;foaf:maker rdf:resource="http://groupme.org/GroupMe/user/fabian"/&gt;
	&lt;tags:taggedWithTag rdf:resource="http://groupme.org/GroupMe/tag/test-tag"/&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/tag/test-tag"&gt;
	&lt;rdf:type rdf:resource="http://www.holygoat.co.uk/owl/redwood/0.1/tags/#Tag"/&gt;
	&lt;tags:name&gt;test-tag&lt;/tags:name&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/resource/2765"&gt;
	&lt;rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Document"/&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/group/2825"&gt;
	&lt;gm:contains rdf:resource="http://groupme.org/GroupMe/resource/2765"/&gt;
&lt;/rdf:Description&gt;
&lt;/rdf:RDF&gt;
									</pre>
								</div>	
								
								
								<h4>2.2 Add a Resource to a GroupMe! group</h4>
								<div style="font-size: small">
									<p>
									<strong>Method:</strong> <code><%= VIEW_VOCABULARY.RESTful_GROUP_URI_PATTERN %>[ID_OF_GROUP]</code> <i>(URL of the group to which the resource should be added)</i><br/>
									<strong>Parameter:</strong> <code>rdf</code><br/>
									<strong>Value of <i>rdf</i>:</strong> the RDF representation of the resource that should be added to the group (ID/URI of the resource can be selected arbitrary as they are replaced anyhow when the GroupMe! group is created properly).<br/>
									<strong>Returns:</strong> the RDF representation of the GroupMe! group into which the resource was added <br/>
									<strong>Remarks:</strong></p><br />
									<ul>
										<li><code><%= VIEW_VOCABULARY.RESTful_GROUP_URI_PATTERN %>[ID_OF_GROUP]</code> has to be a group, which is owned by the user, the client application is acting for.</li>
										<li>the actual URL of the resource has to be submitted within the <code>rdfs:seeAlso</code> field</li>
									</ul>
									<p>
									<strong>Example:</strong><br />
									The HTTP request that is posted to <code><%= VIEW_VOCABULARY.RESTful_GROUP_URI_PATTERN %>[ID_OF_GROUP]</code> might look as
									follows:</p><br/>
									<pre>
POST  /GroupMe/group/1508  HTTP/1.1
Host: http://groupme.org
Accept: application/rdf+xml
	
oauth_token: c6b8ece703858cc0da977c72c3c4fb74 
oauth_consumer_key: groupmewebclient 
oauth_signature_method: HMAC-SHA1
oauth_timestamp: 1236728948 
oauth_nonce: 1236728948600883000
oauth_version: 1.0
oauth_signature: 9VWFYuQIrf7SHpLCktd9b5qfegQ%3D							    
rdf: 
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rdf:RDF
	xmlns:gm="http://groupme.org/rdf/groupme.owl#"
	xmlns:dc="dc"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:tags="http://www.holygoat.co.uk/owl/redwood/0.1/tags/#"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/resource/id-not-yet-set"&gt;
	&lt;rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Document"/&gt;
	&lt;title xmlns="http://purl.org/dc/elements/1.1/"&gt;Grapple Project&lt;/title&gt;
	&lt;description xmlns="http://purl.org/dc/elements/1.1/"&gt;The Website of the Grapple Project&lt;/description&gt;
	&lt;seeAlso xmlns="http://www.w3.org/2000/01/rdf-schema#" rdf:resource="http://www.grapple-project.org"/&gt;
	&lt;tags:taggedWithTag rdf:resource="http://groupme.org/GroupMe/tag/grapple"/&gt;
	&lt;tags:taggedWithTag rdf:resource="http://groupme.org/GroupMe/tag/project"/&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/tag/grapple"&gt;
	&lt;rdf:type rdf:resource="http://www.holygoat.co.uk/owl/redwood/0.1/tags/#Tag"/&gt;
	&lt;tags:name&gt;grappleg&lt;/tags:name&gt;
&lt;/rdf:Description&gt;

&lt;rdf:Description rdf:about="http://groupme.org/GroupMe/tag/project"&gt;
	&lt;rdf:type rdf:resource="http://www.holygoat.co.uk/owl/redwood/0.1/tags/#Tag"/&gt;
	&lt;tags:name&gt;project&lt;/tags:name&gt;
&lt;/rdf:Description&gt;

&lt;/rdf:RDF&gt;									
									</pre>
									<br />
									<p>In the example, the resource (<code>http://groupme.org/GroupMe/resource/id-not-yet-set</code>), which actually is a bookmark of 
									the Web site <code>http://www.grapple-project.org</code>, will be added to the group <code>http://groupme.org/GroupMe/group/1508</code> 
									if the client application (<code>groupmewebclient</code>) is authorized, i.e. if the <code>oauth_token</code> is valid. If the resource was added
									successfully then the entire group (i.e. <a href="<%= VIEW_VOCABULARY.RESTful_GROUP_URI_PATTERN %>1508?output=rdf"><%= VIEW_VOCABULARY.RESTful_GROUP_URI_PATTERN %>1508</a>),
									to which the resource was added, will be returned:
									</p><br/>
									<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rdf:RDF
	xmlns:gm="http://groupme.org/rdf/groupme.owl#"
	xmlns:dc="dc"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:tags="http://www.holygoat.co.uk/owl/redwood/0.1/tags/#"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;

&lt;Group rdf:about="http://groupme.org/GroupMe/group/1508"&gt;
	&lt;dc:title&gt;Grapple Kickoff Meeting - Eindhoven&lt;/dc:title&gt;
    &lt;dc:description&gt;GRAPPLE is an EU FP7 STREP Project which deals with design, developement, 
    and evaluation of Generic Responsive Adaptive Personalized Learning Environment, ...
    &lt;/dc:description&gt;
      
	&lt;contains&gt; 
		&lt;foaf:Document rdf:about="http://groupme.org/GroupMe/resource/1509"&gt;
			&lt;rdfs:seeAlso rdf:resource="http://semweb.kbs.uni-hannover.de/blogging/rss.xml"/&gt;
		&lt;/foaf:Document&gt;
	&lt;/contains&gt;
	  
	&lt;contains&gt; 
		&lt;foaf:Document rdf:about="http://groupme.org/GroupMe/resource/1510"&gt;
			&lt;rdfs:seeAlso rdf:resource="http://www.grapple-project.org"/&gt;
		&lt;/foaf:Document&gt;
	&lt;/contains&gt;
	  
	&lt;contains&gt; 
		&lt;foaf:Document rdf:about="http://groupme.org/GroupMe/resource/1511"&gt;
			&lt;rdfs:seeAlso rdf:resource="http://static.flickr.com/111/312822374_fa659bf0e7.jpg"/&gt;
		&lt;/foaf:Document&gt;
	&lt;/contains&gt;
	  
	&lt;contains&gt; 
		&lt;foaf:Document rdf:about="http://groupme.org/GroupMe/resource/1512"&gt;
			&lt;rdfs:seeAlso rdf:resource="http://static.flickr.com/254/451363397_a68c8e6f5a.jpg"/&gt;
		&lt;/foaf:Document&gt;
	&lt;/contains&gt;
	  
	&lt;foaf:maker&gt;
		&lt;foaf:Person rdf:about="http://groupme.org/GroupMe/user/fabian"&gt;
			&lt;foaf:name&gt;Fabian Abel&lt;/foaf:name&gt;
			&lt;foaf:img rdf:resource="http://www.l3s.de/~abel/fob.jpg"/&gt;
		  	&lt;rdfs:seeAlso rdf:resource="http://www.l3s.de/~abel/foaf.rdf"/&gt;
		&lt;/foaf:Person&gt;
	&lt;/foaf:maker&gt;
	  
  	&lt;tags:taggedWithTag&gt;
 		&lt;tags:Tag rdf:about="http://groupme.org/GroupMe/tag/grapple"&gt;
		&lt;tags:name&gt;grapple&lt;/tags:name&gt;
  		&lt;/tags:Tag&gt;
  	&lt;/tags:taggedWithTag&gt;
  
  	&lt;tags:taggedWithTag&gt;
  		&lt;tags:Tag rdf:about="http://groupme.org/GroupMe/tag/eindhoven"&gt;
  			&lt;tags:name&gt;eindhoven&lt;/tags:name&gt;
  		&lt;/tags:Tag&gt;
  	&lt;/tags:taggedWithTag&gt;
  &lt;/Group&gt;
&lt;/rdf:RDF&gt;
									</pre>
									<br/>
									<p>Hence, only the ID of the bookmark that was added (<code>http://groupme.org/GroupMe/resource/1510</code>) as well as the original
									URL (<code>http://www.grapple-project.org</code>) are contained in the response. Further details about the resource can be accessed by
									performing a GET request: <a href="http://groupme.org/GroupMe/resource/1510?output=rdf">http://groupme.org/GroupMe/resource/1510</a>.</p>
								</div>									
								
								</div>
							</div>
						</div>
					</div>
				</div>
			</div>
		
	</div>
	
	<div id="footer">
		<%@ include file="../../jsp-includes/footer.jsp" %>
	</div>
</body>
</html>